package main

import (
	"errors"
	"fmt"
)

func main() {

	// 内置函数捕获错误
	fmt.Println("内置函数捕获错误")
	test()
	fmt.Println("上面执行成功")
	fmt.Println("正常执行下面的逻辑")

	// 自定义错误
	fmt.Println("内置函数捕获错误")
	fmt.Println("")

	err := tests()
	if err != nil {
		fmt.Println("自定义错误 err = ", err)
		//中断程序执行，执行不到下面逻辑
		panic(err)
	}
	fmt.Println("err上面执行成功")
	fmt.Println("err正常执行下面的逻辑")
}

func tests() (err error) {
	num1 := 10
	num2 := 0
	if num2 == 0 {
		// 抛出自定义错误
		return errors.New("除数不能为0")
	} else {
		result := num1 / num2
		fmt.Println(result)
		// 没有错误，返回零值
		return nil
	}

}

func test() {
	// 利用defer+recover来捕获异常，defer后加上匿名函数的调用
	defer func() {
		// 调用recover 内置函数，捕获异常
		err := recover()
		if err != nil {
			fmt.Println("捕获异常成功")
			fmt.Println("err是：", err)
		}
	}()

	num1 := 10
	num2 := 0
	result := num1 / num2
	fmt.Println(result)
}
